package cn.biplam.front.template.control.rfFlowTable;

import cn.biplam.common.client.OperatorResult;
import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;
import cn.biplam.front.callback.CallBack;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.control.rfFlowTable.callback.action.ActionCallback;

/**
 *  可反射调用的Flowtable
 * @author XiaoRuxing Nov 27, 20095:16:07 PM
 * @version 1.0
 */
public class RfTable implements Template{

	/** 表格 */
	protected RfFlowTableImp table;
	/** 表格属性 */
	protected RfFlowTablePropertys property;

	/**
	 * 构造方法
	 * @param mUser			用户信息类
	 * @param sHomeUrl		主页地址
	 * @param tablePageID	表格页面对象ID
	 * @param mainKey       主键字段名称
	 * @param result		操作结果集
	 * @throws ErrorMessage
	 */
	public RfTable(String sHomeUrl,UserInfo mUser,
			String tablePageID,
			OperatorResult result) throws ErrorMessage{
		this.property= new RfFlowTablePropertys();
		 table = new RfFlowTableImp(sHomeUrl,
				mUser,
				tablePageID, 
				result,
				property);
	}
	
	/**
	 *  设置主键字段名称<BR>
	 *  <B>如果单元格或者操作按钮有提交动作必须设置主键字段名称</B>
	 * @param mainKey 主键字段名称
	 */
	public void setMainKey(String mainKey){
		this.table.setMainKey(mainKey);
	}
	
	/**
	 * 放入一个列字段,指定标题文字、没有动作
	 * @param fieldNames		列字段名
	 * @param fieldCaption		列标题文字
	 * @throws ErrorMessage
	 */
	public void putField(String fieldName,String fieldCaption) throws ErrorMessage{
		this.property.putCol(fieldName, fieldCaption);
	}

	/**
	 * 放入一个列字段,由Callback创建标题文字、没有动作
	 * @param fieldName			列字段名	
	 * @param fieldCaption		列标题文字
	 * @param contentCallback	列内容回调类
	 * @throws ErrorMessage 
	 */
	public void putField(String fieldName,String fieldCaption,CallBack contentCallback) throws ErrorMessage{
		this.property.putCol(fieldName, fieldCaption, contentCallback);
	}
	
	/**
	 * 放入一个列字段,由Callback创建标题文字,由Callback指定动作
	 * @param fieldName			列字段名		
	 * @param fieldCaption		列标题文字
	 * @param contentCallback	列内容回调类
	 * @param actCallback		动作回调类
	 * @throws ErrorMessage
	 */
	public void putField(String fieldName,String fieldCaption,CallBack contentCallback,
			ActionCallback actCallback) throws ErrorMessage{
		this.property.putCol(fieldName, fieldCaption, contentCallback, actCallback);
	}
	
	/**
	 * 设置显示索引列
	 * @param showIndexCol 是否显示索引列
	 */
	public void setShowIndexCol(boolean showIndexCol) throws ErrorMessage{
		this.property.setShowIndexCol(showIndexCol);
	}
	
	/**
	 *  设置指定列宽度(英文字符数)
	 * @param sColFieldName  列字段名
	 * @param iColSize       列宽度(字符数)
	 * @throws ErrorMessage 
	 */
	public void setColSize(String sColFieldName,int iColSize) throws ErrorMessage{
		this.property.setColSize(sColFieldName, iColSize);
	}
	
	/**
	 *  设置列宽度(Px)
	 * @param sColFieldName 列字段名
	 * @param width         列宽度(Px)
	 * @throws ErrorMessage 
	 */
	public void setColWidth(String sColFieldName, String width) throws ErrorMessage{
		this.property.setColWidth(sColFieldName, width);
	}
	
	/**
	 *  设置表格分页参数(要刷新的目标区域ID就是当前表格)<BR>
	 *  <B>表格绑定的数据集必须也是分页模式(由Operator.getPage方法获取)</B>
	 * @param pageActID  分页跳转动作ID
	 * @param recordId   分页页面记录ID
	 */
	public void setPageProperty(String pageActID, String recordId){
		this.table.setPageProperty(pageActID, recordId);
	}
	
	/**
	 *  设置高度
	 * @param height 高度
	 */
	public void setHeight(String height){
		this.table.setHeight(TOOLS.stringToInt(height));
	}
	
	/**
	 * 设置宽度
	 * @param width 宽度
	 * @throws ErrorMessage 
	 */
	public void setWidth(String width) throws ErrorMessage{
		this.table.setWidth(TOOLS.stringToInt(width));
	}
	
	/**
	 *  设置高度
	 * @param height 高度
	 */
	public void setHeight(int height){
		this.table.setHeight(height);
	}
	
	/**
	 *  设置宽度
	 * @param width 宽度
	 * @throws ErrorMessage 
	 */
	public void setWidth(int width) throws ErrorMessage{
		this.table.setWidth(width);
	}
	
	/**
	 * 返回创建好的FlowTable页面对象
	 * @return	HtmlWindow
	 * @throws ErrorMessage
	 */
	public HtmlWindow get() throws ErrorMessage {
		return table.get();
	}
}
